<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>C语言基础 - 综合项目</title>
    <link rel="stylesheet" href="common.css">
    <style>
        /* 页面特有样式 */
        .project-card {
            background-color: #f5f9ff;
            border-radius: 8px;
            padding: 20px;
            margin-bottom: 25px;
            border-left: 4px solid #5D9CEC;
        }
        
        .design-box {
            background-color: #f0f7ff;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
        
        .module-box {
            background-color: #fff3e0;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
        
        .extension-box {
            background-color: #e8f5e9;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
        
        .code-box {
            background-color: #f8f8f8;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
            overflow-x: auto;
        }
        
        .flow-chart {
            background-color: #f8f8f8;
            padding: 15px;
            border-radius: 5px;
            text-align: center;
            font-family: monospace;
            margin: 15px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1>C语言基础入门课程</h1>
        </header>
        
        <nav>
            <a href="index.html">首页</a>
            <a href="02-intro.html">C语言简介与环境搭建</a>
            <a href="03-structure.html" class="current">C程序结构</a>
            <a href="04-datatypes.html">基本数据类型</a>
            <a href="05-variables.html">变量与常量</a>
            <a href="06-operators.html">运算符</a>
            <a href="07-io.html" class="current">输入输出</a>
            <a href="08-conditionals.html">条件语句</a>
            <a href="09-loops.html">循环结构</a>
            <a href="10-functions.html" class="current">函数基础</a>
            <a href="11-scope.html">作用域与存储类</a>
            <a href="12-recursion.html">递归函数</a>
            <a href="13-arrays.html">一维数组</a>
            <a href="14-multidim.html" class="current">多维数组</a>
            <a href="15-strings.html">字符串处理</a>
            <a href="16-pointers.html">指针基础</a>
            <a href="17-pointers_advanced.html" class="current">指针进阶</a>
            <a href="18-structs.html">结构体</a>
            <a href="19-files.html">文件操作</a>
            <a href="20-project.html">综合项目</a>
        </nav>
        
        <main>
            <h2>学生成绩管理系统</h2>
            
            <section>
                <h3>项目概述</h3>
                <p>本系统使用C语言实现一个简单的学生成绩管理系统，包含学生信息的增删改查和统计分析功能。</p>
            </section>
            
            <div class="project-card">
                <h3>1. 系统设计</h3>
                
                <div class="design-box">
                    <h4>数据结构设计</h4>
                    <pre><code>typedef struct {
    int id;          // 学号
    char name[20];   // 姓名
    float chinese;   // 语文成绩
    float math;      // 数学成绩
    float english;   // 英语成绩
    float total;     // 总分
    float average;   // 平均分
} Student;</code></pre>
                </div>
                
                <div class="design-box">
                    <h4>文件存储设计</h4>
                    <ul>
                        <li>使用二进制文件存储学生数据</li>
                        <li>文件名: students.dat</li>
                        <li>每条记录固定大小</li>
                    </ul>
                </div>
                
                <div class="flow-chart">
                    <h4>系统流程图</h4>
                    <pre>
      +----------------+
      |  主菜单系统    |
      +-------+--------+
              |
+-------------v-------------+
| 1. 添加学生 | 2. 删除学生 |
+-------------+-------------+
| 3. 修改信息 | 4. 查询信息 |
+-------------+-------------+
| 5. 成绩统计 | 0. 退出系统 |
+-------------+-------------+
                    </pre>
                </div>
            </div>
            
            <div class="project-card">
                <h3>2. 功能模块分解</h3>
                
                <div class="module-box">
                    <h4>1. 主菜单模块</h4>
                    <ul>
                        <li>显示系统功能菜单</li>
                        <li>获取用户选择</li>
                        <li>调用相应功能模块</li>
                    </ul>
                    <pre><code>void showMenu() {
    printf("\n=== 学生成绩管理系统 ===\n");
    printf("1. 添加学生记录\n");
    printf("2. 删除学生记录\n");
    printf("3. 修改学生信息\n");
    printf("4. 查询学生信息\n");
    printf("5. 成绩统计分析\n");
    printf("6. 显示所有学生\n");
    printf("0. 退出系统\n");
    printf("======================\n");
}</code></pre>
                </div>
                
                <div class="module-box">
                    <h4>2. 添加学生模块</h4>
                    <ul>
                        <li>输入学生信息</li>
                        <li>计算总分和平均分</li>
                        <li>追加到文件末尾</li>
                    </ul>
                    <pre><code>void addStudent() {
    Student stu;
    printf("请输入学号: ");
    scanf("%d", &amp;stu.id);
    // 输入其他信息...
    
    // 计算总分和平均分
    stu.total = stu.chinese + stu.math + stu.english;
    stu.average = stu.total / 3;
    
    // 写入文件
    FILE *file = fopen("students.dat", "ab");
    fwrite(&amp;stu, sizeof(Student), 1, file);
    fclose(file);
}</code></pre>
                </div>
                
                <div class="module-box">
                    <h4>3. 查询模块</h4>
                    <ul>
                        <li>按学号查询</li>
                        <li>按姓名查询</li>
                        <li>显示所有学生</li>
                    </ul>
                    <pre><code>void queryById(int id) {
    FILE *file = fopen("students.dat", "rb");
    Student stu;
    int found = 0;
    
    while (fread(&amp;stu, sizeof(Student), 1, file)) {
        if (stu.id == id) {
            printStudent(stu);
            found = 1;
            break;
        }
    }
    
    if (!found) {
        printf("未找到学号为%d的学生\n", id);
    }
    fclose(file);
}</code></pre>
                </div>
                
                <div class="module-box">
                    <h4>4. 统计模块</h4>
                    <ul>
                        <li>各科平均分</li>
                        <li>最高分/最低分</li>
                        <li>成绩分布</li>
                    </ul>
                    <pre><code>void showStatistics() {
    FILE *file = fopen("students.dat", "rb");
    Student stu;
    int count = 0;
    float chineseSum = 0, mathSum = 0, englishSum = 0;
    
    while (fread(&amp;stu, sizeof(Student), 1, file)) {
        chineseSum += stu.chinese;
        mathSum += stu.math;
        englishSum += stu.english;
        count++;
    }
    
    if (count > 0) {
        printf("语文平均分: %.2f\n", chineseSum / count);
        printf("数学平均分: %.2f\n", mathSum / count);
        printf("英语平均分: %.2f\n", englishSum / count);
    }
    fclose(file);
}</code></pre>
                </div>
            </div>
            
            <div class="project-card">
                <h3>3. 完整代码框架</h3>
                
                <div class="code-box">
                    <h4>main.c 框架</h4>
                    <pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

typedef struct {
    // 学生结构体定义
} Student;

// 函数声明
void showMenu();
void addStudent();
void deleteStudent(int id);
void modifyStudent(int id);
void queryStudent();
void showStatistics();
void listAllStudents();

int main() {
    int choice;
    
    while (1) {
        showMenu();
        printf("请选择操作: ");
        scanf("%d", &amp;choice);
        
        switch (choice) {
            case 1: addStudent(); break;
            case 2: 
                printf("输入要删除的学号: ");
                int id;
                scanf("%d", &amp;id);
                deleteStudent(id);
                break;
            case 3: 
                printf("输入要修改的学号: ");
                scanf("%d", &amp;id);
                modifyStudent(id);
                break;
            case 4: queryStudent(); break;
            case 5: showStatistics(); break;
            case 6: listAllStudents(); break;
            case 0: 
                printf("感谢使用，再见!\n");
                return 0;
            default:
                printf("无效选择，请重新输入!\n");
        }
    }
    
    return 0;
}

// 其他函数实现...</code></pre>
                </div>
            </div>
            
            <div class="project-card">
                <h3>4. 扩展建议</h3>
                
                <div class="extension-box">
                    <h4>功能扩展</h4>
                    <ul>
                        <li>添加用户登录系统</li>
                        <li>实现按成绩排序功能</li>
                        <li>增加数据备份和恢复功能</li>
                        <li>添加分页显示功能</li>
                        <li>实现模糊查询</li>
                    </ul>
                </div>
                
                <div class="extension-box">
                    <h4>技术改进</h4>
                    <ul>
                        <li>使用链表代替数组存储数据</li>
                        <li>添加数据验证功能</li>
                        <li>实现更友好的用户界面</li>
                        <li>添加日志记录功能</li>
                        <li>使用数据库替代文件存储</li>
                    </ul>
                </div>
                
                <div class="extension-box">
                    <h4>项目进阶方向</h4>
                    <ul>
                        <li>教师管理系统</li>
                        <li>课程管理系统</li>
                        <li>学生选课系统</li>
                        <li>结合网络功能的在线系统</li>
                        <li>图形界面版本</li>
                    </ul>
                </div>
            </div>
            
            <section>
                <h3>项目开发建议</h3>
                <div class="best-practice">
                    <h4>开发步骤</h4>
                    <ol>
                        <li>设计数据结构和文件格式</li>
                        <li>实现基本CRUD功能(增删改查)</li>
                        <li>添加统计和报表功能</li>
                        <li>完善错误处理和输入验证</li>
                        <li>进行代码重构和优化</li>
                    </ol>
                </div>
                
                <div class="best-practice">
                    <h4>调试技巧</h4>
                    <ul>
                        <li>使用printf调试关键变量</li>
                        <li>分模块测试功能</li>
                        <li>检查文件读写是否正确</li>
                        <li>验证边界条件</li>
                        <li>测试异常输入情况</li>
                    </ul>
                </div>
            </section>
        </main>
        
        <footer>
             <p>&copy; </p>
        </footer>
        
        <!-- 二维码区域 -->

    </div> <!-- 结束.container -->
</body>
</html>